package com.tedu.api;

import org.junit.Test;

public class StringBuilderAPI {
    /**
     * 字符串大量拼接
     */
    @Test
    public void testString(){
        String str="字符串";
        for (int i=0;i<1000000;i++){
            str+=i;
            //   System.out.println(str);
        }
        /**
         * String-------------不可改变对象  BUG（常量池）
         * 假设：拼接·出1000000000000000000w个String---内存【开销过大】
         * 操作系统发现内存空间越来越小，回去硬盘上开辟空间--程序 电脑会卡
         *
         * 解决方法：不创建新对象，原来对象实现拼接【添加、替换、插入】
         * StringBuilder对象    可变字符串对象
         * 语法：StringBuilder  sb=new StringBuilder（“字符串”）
         *
         * c语言      变量   int a=malloc（4）；开辟4个字节空间
         *                   a=1；
         *                   free（a）；   清理空间
         *                   不会存在内存溢出
         * Java语言    变量   int a=1  内存开辟a空间，内存1.JVM虚拟机提供GC
         *               会存在内存溢出
         */

    }
    @Test
    public void testSB(){
        //创建可变的字符串对象【解决String大量拼接，造成内存溢出】
        String str="你就是我的";
        StringBuilder sb=new StringBuilder(str);
        //append方法  添加新字符串  等同于加号【拼接】
        sb.append("小可爱");
        System.out.println(sb);
    }
    /**
     * replace方法    替换    返回值：String
     * 作用：将字符串中指定范围中“内容”替换成给定的内容
     *     含头不含尾
     *     replace(int  start,String  str)
     *     开始位置，结束位置，替换内容
     *
     */
    @Test
    public void testReplace(){
        //创建StringBuilder可变字符串类
        StringBuilder sb=new StringBuilder("你就是我的小可爱~");
        sb=sb.replace(5,8,"小Baby");
        System.out.println(sb);
    }

    /**
     * insert方法    插入    返回值String
     * 作用：将给定字符串插入到当前字符串中某个位置
     * insert(int index，String str)
     *        插入位置   插入内容
     */
    @Test
    public void testInsert(){
        //创建可变字符串.对象
        StringBuffer sb=new StringBuffer("你就是我的小可爱");
        sb.insert(0,"今天");
        System.out.println(sb);
    }
    /**
     * 考试题
     * StringBuilder和 StringBuffer的区别
     * StringBuilder和 StringBuffer---------方法完全一致【追加 替换 插入】
     * StringBuilder------JDK1.0------线程安全【效率低】
     * StringBuffer------JDK1.5------线程不安全【效率高】
     * 需求说明书：模块用什么类【标注】   业务
     */
}